﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

using Controller;
using Model;

namespace WPFGUI
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        // husker hvem der er logget ind
        Bruger loginBruger;
        // instancere controlleren så den er ens overalt.
        Controller.Controller wilkesystem;
        enum tilstand {bruger, admin}
        tilstand aktueltilstand;


        public MainWindow()
        {
            InitializeComponent();
            // wilkesystem instanceres her
            wilkesystem = new Controller.Controller();
            
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            //if (loginBruger == null)
            //{
            //    Login loginpage = new Login(wilkesystem);
            //    this.Hide();
            //    loginpage.ShowDialog();
            //    this.Show();

            //    BrugerLogin(wilkesystem.loginBruger);
            //}
            dgBrugere.ItemsSource = wilkesystem.VisBrugere();
            dgBrugeriProjekter.ItemsSource = wilkesystem.VisBrugere();
            dgKontrakt.ItemsSource = wilkesystem.VisKontrakter();
            cbKontrakter.ItemsSource = wilkesystem.VisKontrakter();
        }

        #region Bruger 
        
        public void BrugerLogin(Bruger bruger)
        {
            if (bruger != null)
            {
                loginBruger = bruger;

                // hvis bruger logger ind kalder vi tilstand for at checke deres rettigheder i systemet
                setTilstand();
            }
            else
            {
                this.Close();
            }
        }

        private void btnOpretBruger_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                string navn = txtNavn.Text;
                string adresse = txtAdresse.Text;
                int postnr = int.Parse(txtPostnr.Text);
                string by = txtBy.Text;
                string email = txtMail.Text;
                int telefonnr = int.Parse(txtTelefonnr.Text);
                string password = txtPassword.Password;
                Int64 kontonr = Int64.Parse(txtKontoNr.Text);
                int regnr = int.Parse(txtRegNr.Text);
                bool administrator = cbAdministrator.IsChecked.Value;
                bool aktiv = cbAktiv.IsChecked.Value;
                Kontrakt kontraktType = (Kontrakt)cbKontrakter.SelectedItem;

                wilkesystem.OpretBruger(navn, password, administrator, email, telefonnr, adresse, postnr, by, aktiv, kontonr, regnr, kontraktType.Kontrakttype);

                dgBrugere.ItemsSource = null;
                dgBrugere.ItemsSource = wilkesystem.VisBrugere();
                dgBrugeriProjekter.ItemsSource = null;
                dgBrugeriProjekter.ItemsSource = wilkesystem.VisBrugere();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void dgBrugere_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                Bruger enBruger = (Bruger)dgBrugere.SelectedCells[0].Item;

                wilkesystem.FindBruger(enBruger.personID);

                txtNavn.Text = enBruger.navn;
                txtAdresse.Text = enBruger.adresse;
                txtPostnr.Text = enBruger.postnr.ToString();
                txtBy.Text = enBruger.by;
                txtMail.Text = enBruger.email;
                txtTelefonnr.Text = enBruger.telefonnr.ToString();
                txtPassword.Password = enBruger.password;
                txtKontoNr.Text = enBruger.kontonr.ToString();
                txtRegNr.Text = enBruger.regnr.ToString();
                cbAdministrator.IsChecked = enBruger.administrator;
                cbAktiv.IsChecked = enBruger.aktiv;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnRedigerBruger_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Bruger enBruger = (Bruger)dgBrugere.SelectedItem;

                string navn = txtNavn.Text;
                string adresse = txtAdresse.Text;
                int postnr = int.Parse(txtPostnr.Text);
                string by = txtBy.Text;
                string email = txtMail.Text;
                int telefonnr = int.Parse(txtTelefonnr.Text);
                string password = txtPassword.Password;
                long kontonr = long.Parse(txtKontoNr.Text);
                int regnr = int.Parse(txtRegNr.Text);
                bool administrator = cbAdministrator.IsChecked.Value;
                bool aktiv = cbAktiv.IsChecked.Value;
                int personID = enBruger.personID;

                wilkesystem.RetBruger(personID, navn, adresse, postnr, by, email, telefonnr, password, kontonr, regnr, administrator, aktiv, "- NA");
                dgBrugere.Items.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion

        #region Tilstande

        public void setTilstand()
        {
            if (!loginBruger.administrator)
            {
                brugerTilstand();
            }
        }

        public void brugerTilstand()
        {
            aktueltilstand = tilstand.bruger;

            tabItem1.Visibility = Visibility.Collapsed;
            tabItem2.Visibility = Visibility.Collapsed;
            tabItem4.Visibility = Visibility.Collapsed;
        }

        #endregion

        #region Projekt

        private void btnOpretProjekt_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                string projektnavn = txtProjektNavn.Text;
                DateTime projektstart = dpProjektStart.SelectedDate.Value.Date;
                DateTime projektslut = dpProjektSlut.SelectedDate.Value.Date;

                wilkesystem.OpretNyProjekt(projektnavn, projektstart, projektslut);

                //cbProjekter.Items.Add(wilkesystem.visProjekter());
                //cbProjekter.SelectedItem = wilkesystem.visProjekter();
                cbProjekter.ItemsSource = null;
                cbProjekter.ItemsSource = wilkesystem.VisProjekter();

                cbProjekter1.ItemsSource = null;
                cbProjekter1.ItemsSource = wilkesystem.VisProjekter();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnTilknytbrugere_Click(object sender, RoutedEventArgs e)
        {
            Bruger enBruger = (Bruger)dgBrugeriProjekter.SelectedItem;
            Projekt etProjekt = (Projekt)cbProjekter1.SelectedItem;

            wilkesystem.TilknytBrugerTilProjekt(enBruger, etProjekt);
            dgProjekter.ItemsSource = null;
            dgProjekter.ItemsSource = wilkesystem.VisProjekter();
        }

        private void dgProjekter_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                Projekt etProjekt = (Projekt)dgProjekter.SelectedCells[0].Item;

                wilkesystem.FindBruger(etProjekt.projektnummer);

                txtProjektNavn.Text = etProjekt.projektnavn;
                dpProjektStart.Text = etProjekt.projektstart.ToString();
                dpProjektSlut.Text = etProjekt.projektslut.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnRedigerProjekt_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Projekt etProjekt = (Projekt)dgProjekter.SelectedItem;

                string projektnavn = txtProjektNavn.Text;
                DateTime projektstart = dpProjektStart.SelectedDate.Value.Date;
                DateTime projektslut = dpProjektSlut.SelectedDate.Value.Date;
                int projektnummer = etProjekt.projektnummer;

                wilkesystem.RetProjekt(projektnavn, projektstart, projektslut, projektnummer);
                dgProjekter.Items.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        
        private void btnSletprojekt_Click(object sender, RoutedEventArgs e)
        {
            Projekt etProjekt = (Projekt)dgProjekter.SelectedItem;

            wilkesystem.SletProjekt(etProjekt.projektnummer);
            dgProjekter.Items.Refresh();
        }
        
        private void cbProjekter1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (cbProjekter1.SelectedItem != null)
            {
                Projekt etProjekt = (Projekt)cbProjekter1.SelectedItem;

                wilkesystem.FindProjekt(etProjekt.projektnummer);

                txtProjektNavn.Text = etProjekt.projektnavn;
                dpProjektStart.Text = etProjekt.projektstart.ToString();
                dpProjektSlut.Text = etProjekt.projektslut.ToString();
            }
            else
            {
                txtProjektNavn.Clear();
            }
        }

        #endregion

        #region Kontrakt

        private void btnOpretKontrakt_Click(object sender, RoutedEventArgs e)
        {
            Decimal timeLøn = Decimal.Parse(txtTimeLøn.Text);
            string kontraktType = txtKontrakType.Text;

            wilkesystem.OpretKontrakt(timeLøn, kontraktType);

            dgKontrakt.ItemsSource = null;
            dgKontrakt.ItemsSource = wilkesystem.VisKontrakter();

            cbKontrakter.ItemsSource = null;
            cbKontrakter.ItemsSource = wilkesystem.VisKontrakter();
        }
        
        private void dgKontrakt_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                Kontrakt enKontrakt = (Kontrakt)dgKontrakt.SelectedCells[0].Item;

                wilkesystem.FindKontrakt(enKontrakt.KontraktNummer);

                txtKontraktNr.Text = enKontrakt.KontraktNummer.ToString();
                txtTimeLøn.Text = enKontrakt.Timeløn.ToString();
                txtKontrakType.Text = enKontrakt.Kontrakttype;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion

        

    }
}
